/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.todoterreno.beans;

import com.todoterreno.dao.GestionImagenesInter;
import com.todoterreno.dao.impl.GestionImagenesInterDao;
import com.todoterreno.datamodel.CasaVerticalDataModel;
import com.todoterreno.model.CasaTerreno;
import com.todoterreno.model.CasaTerrenoDet;
import com.todoterreno.model.CasaTerrenoVertical;
import com.todoterreno.utils.AddressConverter;
import com.todoterreno.utils.GoogleGeoCode;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseId;
import org.primefaces.context.RequestContext;
import org.primefaces.event.map.OverlaySelectEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.MapModel;
import org.primefaces.model.map.Marker;

/**
 *
 * @author davex
 */
public class ListingTerrenoConBean implements Serializable{

    private String root = "/home/davidpanel/fotos/";
    private String rootDet="/home/davidpanel/detalle/";
    private List<CasaTerrenoVertical> images;
    private String codCasa;
    private String nombreCasaMapa;
    private CasaTerreno casa;
    private CasaTerrenoDet detCasa;
    private StreamedContent streamImagen;
    private StreamedContent streamImagenCasa;
    private StreamedContent streamImagenDet;
    private GestionImagenesInter obtImagen = new GestionImagenesInterDao();
    private CasaVerticalDataModel casaVerDataModel;
    private MapModel simpleMapModel;
    private MapModel casaMapModel;
    
    private Marker marker;
    
    private String findCasa;
    private String findUbicacion;
    private String findTipo;
    private String findDormit;
    private String findBanios;
    private String findPriceMin;
    private String findPriceMax;
    
    
    public ListingTerrenoConBean() {
        images=obtImagen.consultarListing(10);
        casaVerDataModel=new CasaVerticalDataModel(images);
        detCasa=new CasaTerrenoDet();
        casa=new CasaTerreno();
//        simpleMapModel=new DefaultMapModel();
//        casaMapModel=new DefaultMapModel();
    }
    
    public void cargarImagenesDetalle() throws IOException{
        System.out.println("Entroooo");
        
        RequestContext reqCon= RequestContext.getCurrentInstance();
        System.out.println("casaParm: "+codCasa);
        detCasa=obtImagen.consultarDetalleCasa(codCasa);
        System.out.println("CASA 22: "+casa.toString());
        System.out.println("DET: "+detCasa.toString());
//        
        //Para el mapa        
//        LatLng coord1 = new LatLng(36.879466, 30.667648);
        String coordenadas=AddressConverter.buscaLocalizacion(casa.getDireccion());
//        String coordenadas=GoogleGeoCode.buscaLocalizacion(casa.getDireccion());
        String[] latitude=new String[2];
        if(coordenadas.equals("")){
            System.out.println("No se encontraron las coordenadas");
            latitude="13.706881, -89.21373179999999".split(",");
        }else{
            System.out.println("Se encontraron las coordenadas: "+coordenadas);
            latitude=coordenadas.split(",");
        }
        
        LatLng coord1=new LatLng(Double.parseDouble(latitude[0]), Double.parseDouble(latitude[1]));
        simpleMapModel=new DefaultMapModel();
        simpleMapModel.addOverlay(new Marker(coord1));
//        simpleMapModel.addOverlay(new Marker(coord1, "Mapaaaaaa"));
        
        reqCon.update(":form:mapa");
        reqCon.execute("dialogShow.show()");
        
    }
    
    public void cargarMapaConCasa() throws IOException{
        System.out.println("EntraMapa");
        RequestContext reqCon= RequestContext.getCurrentInstance();
        casaMapModel=new DefaultMapModel();
        String[] latitude=new String[2];       
        System.out.println(findCasa+","+findUbicacion+","+findTipo+","+findDormit
                +","+findBanios+","+findPriceMin+","+findPriceMax);
        
//        List<CasaTerreno> listhouses = obtImagen.consultarCasas(1);
        List<CasaTerreno> listhouses = obtImagen.buscarCasas(findCasa,findUbicacion,(findTipo!=null?Integer.parseInt(findTipo):0),Integer.parseInt(findDormit),Integer.parseInt(findBanios),(!"".equals(findPriceMin)?Double.valueOf(findPriceMin):0),(!"".equals(findPriceMax)?Double.valueOf(findPriceMax):0));
        for(CasaTerreno ct:listhouses){
            System.out.println("Direccion: "+ct.getDireccion());
//            String coordenadas=AddressConverter.buscaLocalizacion(casa.getDireccion());
            String coordenadas=AddressConverter.buscaLocalizacion(ct.getDireccion());
//            String coordenadas=GoogleGeoCode.buscaLocalizacion(ct.getDireccion());
            if(coordenadas.equals("")){
                System.out.println("No se encontraron las coordenadas");
                latitude="13.706881, -89.21373179999999".split(",");
            }else{
                System.out.println("Se encontraron las coordenadas: "+coordenadas);
                latitude=coordenadas.split(",");
            }

            LatLng coord1=new LatLng(Double.parseDouble(latitude[0]), Double.parseDouble(latitude[1]));
            casaMapModel.addOverlay(new Marker(coord1, ct.getDireccion(), ct.getNombrefoto()));
            
        }
        
        reqCon.update(":form:mapaCasas");
        reqCon.execute("mapaShow.show()");
    }
    
    public void presentarDetalleMapa() throws IOException{
        System.out.println("Entro a ver el detalle del mapa con nombre: "+nombreCasaMapa);
        RequestContext reqCon= RequestContext.getCurrentInstance();
        casa=obtImagen.consultarCasaPorFoto(nombreCasaMapa);
        System.out.println("Casa2: "+casa.toString());
        detCasa=obtImagen.consultarDetalleCasa(casa.getIdcasater());
        System.out.println("Detcasa2: "+detCasa.toString());
//        String coordenadas=GoogleGeoCode.buscaLocalizacion(casa.getDireccion());
        String coordenadas=AddressConverter.buscaLocalizacion(casa.getDireccion());
        String[] latitude=new String[2];
        if(coordenadas.equals("")){
            System.out.println("No se encontraron las coordenadas");
            latitude="13.706881, -89.21373179999999".split(",");
        }else{
            System.out.println("Se encontraron las coordenadas: "+coordenadas);
            latitude=coordenadas.split(",");
        }
        
        LatLng coord1=new LatLng(Double.parseDouble(latitude[0]), Double.parseDouble(latitude[1]));
        simpleMapModel=new DefaultMapModel();
        simpleMapModel.addOverlay(new Marker(coord1));
//        simpleMapModel.addOverlay(new Marker(coord1, "Mapaaaaaa"));
        
        reqCon.update(":form:mapa");
        reqCon.execute("dialogShow.show()");
        
    }

    public List<CasaTerrenoVertical> getImages() {
        return images;
    }

    public void setImages(List<CasaTerrenoVertical> images) {
        this.images = images;
    }

    public String getRoot() {
        return root;
    }

    public void setRoot(String root) {
        this.root = root;
    }

    public StreamedContent getStreamImagen() {
        try {

            FacesContext context = FacesContext.getCurrentInstance();
//            if (context.getRenderResponse()) {
            if(context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE){                    
                return new DefaultStreamedContent();
            } else {
                String name = context.getExternalContext().getRequestParameterMap().get("nameImage");
                File imgFile = new File(root + name);
                StreamedContent ds = new DefaultStreamedContent(new FileInputStream(imgFile), "image/jpg");
                return ds;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public void setStreamImagen(StreamedContent streamImagen) {
        this.streamImagen = streamImagen;
    }

    public CasaVerticalDataModel getCasaVerDataModel() {
        return casaVerDataModel;
    }

    public void setCasaVerDataModel(CasaVerticalDataModel casaVerDataModel) {
        this.casaVerDataModel = casaVerDataModel;
    }

    public String getRootDet() {
        return rootDet;
    }

    public void setRootDet(String rootDet) {
        this.rootDet = rootDet;
    }

    public CasaTerrenoDet getDetCasa() {
        return detCasa;
    }

    public void setDetCasa(CasaTerrenoDet detCasa) {
        this.detCasa = detCasa;
    }

    public StreamedContent getStreamImagenDet() {
        try {

            FacesContext context = FacesContext.getCurrentInstance();
//            if (context.getRenderResponse()) {
            if(context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE){                    
                return new DefaultStreamedContent();
            } else {
                String name = context.getExternalContext().getRequestParameterMap().get("nombImagenDet");
                System.out.println("Imagen detalle: "+name);
                File imgFile = new File(rootDet + name);
                StreamedContent ds = new DefaultStreamedContent(new FileInputStream(imgFile), "image/jpg");
                return ds;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public void setStreamImagenDet(StreamedContent streamImagenDet) {
        this.streamImagenDet = streamImagenDet;
    }

    public CasaTerreno getCasa() {
        return casa;
    }

    public void setCasa(CasaTerreno casa) {
        this.casa = casa;
    }

    public String getCodCasa() {
        return codCasa;
    }

    public void setCodCasa(String codCasa) {
        this.codCasa = codCasa;
    }

    public GestionImagenesInter getObtImagen() {
        return obtImagen;
    }

    public void setObtImagen(GestionImagenesInter obtImagen) {
        this.obtImagen = obtImagen;
    }

    public MapModel getSimpleMapModel() {
        return simpleMapModel;
    }

    public void setSimpleMapModel(MapModel simpleMapModel) {
        this.simpleMapModel = simpleMapModel;
    }

    public String getFindCasa() {
        return findCasa;
    }

    public void setFindCasa(String findCasa) {
        this.findCasa = findCasa;
    }

    public String getFindTipo() {
        return findTipo;
    }

    public void setFindTipo(String findTipo) {
        this.findTipo = findTipo;
    }

    public String getFindUbicacion() {
        return findUbicacion;
    }

    public void setFindUbicacion(String findUbicacion) {
        this.findUbicacion = findUbicacion;
    }

    public String getFindDormit() {
        return findDormit;
    }

    public void setFindDormit(String findDormit) {
        this.findDormit = findDormit;
    }

    public String getFindBanios() {
        return findBanios;
    }

    public void setFindBanios(String findBanios) {
        this.findBanios = findBanios;
    }

    public String getFindPriceMax() {
        return findPriceMax;
    }

    public void setFindPriceMax(String findPriceMax) {
        this.findPriceMax = findPriceMax;
    }

    public String getFindPriceMin() {
        return findPriceMin;
    }

    public void setFindPriceMin(String findPriceMin) {
        this.findPriceMin = findPriceMin;
    }

    public MapModel getCasaMapModel() {
        return casaMapModel;
    }

    public void setCasaMapModel(MapModel casaMapModel) {
        this.casaMapModel = casaMapModel;
    }

    public void onMarkerSelect(OverlaySelectEvent event) {
        marker = (Marker) event.getOverlay();
    }
     
    public Marker getMarker() {
        return marker;
    }
    
    public void setMarker(Marker marker) {
        this.marker = marker;
    }

    public StreamedContent getStreamImagenCasa() {
        try {

            FacesContext context = FacesContext.getCurrentInstance();
//            if (context.getRenderResponse()) {
            if(context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE){                    
                return new DefaultStreamedContent();
            } else {
                String name = context.getExternalContext().getRequestParameterMap().get("nameImageCasa");
//                System.out.println("ImagenMap: "+name);
                File imgFile = new File(root + name);
                StreamedContent ds = new DefaultStreamedContent(new FileInputStream(imgFile), "image/jpg");
                return ds;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public void setStreamImagenCasa(StreamedContent streamImagenCasa) {
        this.streamImagenCasa = streamImagenCasa;
    }

    public String getNombreCasaMapa() {
        return nombreCasaMapa;
    }

    public void setNombreCasaMapa(String nombreCasaMapa) {
        this.nombreCasaMapa = nombreCasaMapa;
    }
    
    

}